package com.atguigu.gmall.product.service.Impl;

import com.atguigu.gmall.model.product.*;
import com.atguigu.gmall.product.mapper.*;
import com.atguigu.gmall.product.service.ManageService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class ManageServiceImpl implements ManageService {
    @Autowired
    private BaseCategory1Mapper baseCategory1Mapper;

    @Autowired
    private BaseCategory2Mapper baseCategory2Mapper;

    @Autowired
    private BaseCategory3Mapper baseCategory3Mapper;

    @Autowired
    private BaseAttrInfoMapper baseAttrInfoMapper;

    @Autowired
    private BaseAttrValueMapper baseAttrValueMapper;

//    查询所有一级分类信息
    @Override
    public List<BaseCategory1> getCategory1() {
        return baseCategory1Mapper.selectList(null);
    }


//    根据一级分类
//            查询所有二级分类数据

    @Override
    public List<BaseCategory2> getCategory2(Long category1Id) {
        // select * from baseCategory2 where Category1Id = ?
        QueryWrapper queryWrapper = new QueryWrapper<BaseCategory2>();
        queryWrapper.eq("category1_id",category1Id);
        List<BaseCategory2> baseCategory2List = baseCategory2Mapper.selectList(queryWrapper);
        return baseCategory2List;
    }


//    根据二级分类
//            查询所有三级分类数据
    @Override
    public List<BaseCategory3> getCategory3(Long category2Id) {
        // select * from baseCategory3 where Category2Id = ?
        QueryWrapper queryWrapper = new QueryWrapper<BaseCategory3>();
        queryWrapper.eq("category2_id",category2Id);
        return baseCategory3Mapper.selectList(queryWrapper);
    }


//        * 根据分类Id 获取平台属性数据
//     * 接口说明：
//            *      1，平台属性可以挂在一级分类、二级分类和三级分类
//     *      2，查询一级分类下面的平台属性，传：category1Id，0，0；   取出该分类的平台属性
//     *      3，查询二级分类下面的平台属性，传：category1Id，category2Id，0；
//            *         取出对应一级分类下面的平台属性与二级分类对应的平台属性
//     *      4，查询三级分类下面的平台属性，传：category1Id，category2Id，category3Id；
//            *         取出对应一级分类、二级分类与三级分类对应的平台属性
    @Override
    public List<BaseAttrInfo> getAttrInfoList(Long category1Id, Long category2Id, Long category3Id) {
        // 调用mapper：
        List<BaseAttrInfo> baseAttrInfos = baseAttrInfoMapper.selectBaseAttrInfoList(category1Id, category2Id, category3Id);

        return baseAttrInfos;
    }


//    保存平台属性方法
    @Override
    @Transactional
    public void seveAttrInfo(BaseAttrInfo baseAttrInfo) {
        // 什么情况下 是添加，什么情况下是更新，修改 根据baseAttrInfo 的Id
        // baseAttrInfo
        if (baseAttrInfo.getId()!=null){
            baseAttrInfoMapper.updateById(baseAttrInfo);
        }else {
            //新增
//            baseAttrInfo 插入数据
            baseAttrInfoMapper.insert(baseAttrInfo);
        }
//        baseAttrValue 平台属性值
        //修改：通过先删除（baseAttrValue）再新增的方法
        //删除条件：baseAttrValue.attrId =baseAttrInfo.id
        QueryWrapper queryWrapper = new QueryWrapper<BaseAttrValue>();
        queryWrapper.eq("attr_id",baseAttrInfo.getId());
        baseAttrValueMapper.delete(queryWrapper);
        //获取页面传递过来的所有平台属性值数据
        List<BaseAttrValue>attrValues = baseAttrInfo.getAttrValueList();
        if (attrValues!=null && attrValues.size()>0){
            //循环遍历
            for (BaseAttrValue baseAttrValue: attrValues){
                //获取平台属性ID给attrId
                baseAttrValue.setAttrId(baseAttrInfo.getId());
                baseAttrValueMapper.insert(baseAttrValue);
            }
        }

    }

//     * 根据attrId 查询平台属性对象
    @Override
    public BaseAttrInfo getAttrInfo(Long attrId) {
        BaseAttrInfo baseAttrInfo = baseAttrInfoMapper.selectById(attrId);
        //查询到最新的平台信息属性值集合数据放入平台属性中！
        baseAttrInfo.setAttrValueList(getAttrValuelist(attrId));
        return baseAttrInfo;
    }

//     * 根据属性id获取属性值
    private List<BaseAttrValue> getAttrValuelist(Long attrId) {
        // select * from baseAttrValue where attrId = ?
        QueryWrapper queryWrapper = new QueryWrapper<BaseAttrValue>();
        queryWrapper.eq("attr_id",attrId);
        List<BaseAttrValue> baseAttrValuesList = baseAttrValueMapper.selectList(queryWrapper);

        return baseAttrValuesList;
    }
}